//
// Created by 紫霄 on 2020/4/21.
//

#ifndef LEETCODE_52_H
#define LEETCODE_52_H
#include <vector>
using namespace std;
// 输入两个链表，找出它们的第一个公共节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
struct ListNode {
  int val;
  ListNode *next;
  ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
  ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    if (headA && headB) {
      ListNode *tempA = headA;
      ListNode *tempB = headB;
      bool A2B = false;
      bool B2A = false;
      while (tempB != tempA) {
        if (tempA->next) {
          tempA = tempA->next;
        } else {
          if (!A2B) {
            tempA = headB;
            A2B = true;
          } else {
            return nullptr;
          }
        }
        if (tempB->next) {
          tempB = tempB->next;
        } else {
          if (!B2A) {
            tempB = headA;
            B2A = true;
          } else {
            return nullptr;
          }
        }
      }
      return tempA;
    } else {
      return nullptr;
    }
  }
};
#endif // LEETCODE_52_H
